package com.fmm.medium;

import java.util.HashMap;
import java.util.Map;
import java.util.PriorityQueue;

public class PalindromicMaxCount {

    public static int calculateMaxCount(String[] words) {
        // 待填充数
        PriorityQueue<Integer> pq = new PriorityQueue<>();
        // 记录每个字符出现的次数
        Map<Character, Integer> cMap = new HashMap<>();
        for (String word : words) {
            // 待填充数从小到大排序，后面使用时，从小到大弹出
            pq.add(word.length() - word.length() % 2);
            // 记录每个字符出现的次数
            for (char c : word.toCharArray()) {
                cMap.put(c, cMap.getOrDefault(c, 0) + 1);
            }
        }
        // 计算成对的字符数
        Integer coupleCount = cMap.values().stream().reduce((a, b) -> (a - a % 2) + (b - b % 2)).get();
        Integer singleCount;
        int result = 0;
        // 填充完成或者成对字符数用完，返回结果
        while ((singleCount = pq.poll()) != null) {
            if (coupleCount >= singleCount) {
                coupleCount = coupleCount - singleCount;
                result ++;
            } else {
                break;
            }
        }
        return result;
    }
}
